package stage;

import com.vividsolutions.jts.geom.Geometry;

/**
 * Classe che implementa gli oggetti che contengono l'oggetto Geometry,
 * il suo mbr, l'id, il numero di risultati delle join, il tempo dell'ultimo
 * accesso
 *
 * @author Matteo Cuccato
 * @author Nicola Girardi
 */
public class GeometryContainer {

    private int id, n_risultati;
    private Geometry g;
    private Geometry mbr;
    private long time;

    /**
     * Metodo costruttore vuoto
     *
     */
    public GeometryContainer() {
        id = 0;
        g = null;
        mbr = null;
        time = 0;
        n_risultati = 0;
    }//end costruttore

    /**
     * Metodo costruttore
     *
     * @param int id numero identificatore
     * @param Geometry g geometria associata all'id
     */
    public GeometryContainer(int id, Geometry g) {
        this.id = id;
        this.g = g;
        mbr = g.getEnvelope();
        time = System.currentTimeMillis();
        n_risultati = 0;
    }//end costruttore

    /**
     * Metodo costrutture
     *
     * @param int id numero identificatore
     * @param Geometry g geometria associata all'id
     * @param Geometry m envelope della geometry
     */
    public GeometryContainer(int id, Geometry g, Geometry m) {
        this.id = id;
        this.g = g;
        mbr = m;
        time = System.currentTimeMillis();
        n_risultati = 0;
    }//end costruttore

    /**
     * Metodo che ritorna id
     *
     * @return int id
     */
    public int getId() {
        return id;
    }

    /**
     * Metodo che ritorna la geometria
     *
     * @return Geometry
     */
    public Geometry getGeometry() {
        return g;
    }

    /**
     * Metodo che ritorna l'envelope della geometry
     *
     * @return Geometry envelope della geometry
     */
    public Geometry getMbr() {
        return mbr;
    }

    /**
     * Metodo che ritorna la variabile time
     *
     * @return long tempo ultimo accesso dell'oggetto
     */
    public long getTime() {
        return time;
    }

    /**
     * Ritorna il numero di risultati prodotti
     *
     * @return int numero di risultati prodotti
     */
    public int getN_risultati() {
        return n_risultati;
    }

    /**
     * Setta il parametro id
     *
     * @param int Nuovo id dell'oggetto
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * Metodo per impostare o cambiare la geometry
     *
     * @param Geometry Nuova geometry
     */
    public void setGeometry(Geometry g) {
        this.g = g;
        mbr = g.getEnvelope();
    }

    /**
     * Metodo per impostare o cambiare l'mbr
     *
     * @param Geometry Envelope della geometry
     */
    public void setMbr(Geometry mbr) {
        this.mbr = mbr;
    }

    /**
     * Metodo per impostare o cambiare l'mbr
     *
     * @param long Tempo del nuovo accesso alla variabile
     */
    public void setTime(long t) {
        if (t > time) {
            time = t;
        }
    }

    /**
     * Metodo per impostare o cambiare il numero di risultati
     *
     * @param int Numero di risultati
     */
    public void setN_risultati(int n) {
        if (n > n_risultati) {
            this.n_risultati = n;
            time = System.currentTimeMillis();
        }
    }

    /**
     * Metodo che stampa il contenuto di una GeometryContainer
     * 
     */
    public void stampaGeometryContainer() {
        if (g==null) {
            System.out.println("GeometryContainer vuota!");
        } else {
            System.out.println("id: " + id + " " + g.toText() + " ,n_ris: " + n_risultati);
        }
    }
    
}//end GeometryContainer

